Component({
  properties: {
    // 标签文字
    label: {
      type: String,
      value: ''
    },
    // 输入框类型
    type: {
      type: String,
      value: 'text' // text, password, search, underline, borderless
    },
    // 输入框尺寸
    size: {
      type: String,
      value: 'medium' // small, medium, large
    },
    // 输入值
    value: {
      type: String,
      value: ''
    },
    // 占位符
    placeholder: {
      type: String,
      value: ''
    },
    // 占位符样式
    placeholderStyle: {
      type: String,
      value: ''
    },
    // 左侧图标
    iconLeft: {
      type: String,
      value: ''
    },
    // 右侧图标
    iconRight: {
      type: String,
      value: ''
    },
    // 是否必填
    required: {
      type: Boolean,
      value: false
    },
    // 是否禁用
    disabled: {
      type: Boolean,
      value: false
    },
    // 最大长度
    maxlength: {
      type: Number,
      value: 140
    },
    // 是否显示清除按钮
    showClear: {
      type: Boolean,
      value: false
    },
    // 是否显示字符计数
    showCounter: {
      type: Boolean,
      value: false
    },
    // 验证状态
    status: {
      type: String,
      value: 'default' // default, success, error, warning, info
    },
    // 帮助文本
    helpText: {
      type: String,
      value: ''
    },
    // 错误文本
    errorText: {
      type: String,
      value: ''
    },
    // 是否聚焦
    focus: {
      type: Boolean,
      value: false
    },
    // 确认按钮类型
    confirmType: {
      type: String,
      value: 'done'
    },
    // 确认时保持键盘
    confirmHold: {
      type: Boolean,
      value: false
    },
    // 光标位置
    cursor: {
      type: Number,
      value: -1
    },
    // 选择开始位置
    selectionStart: {
      type: Number,
      value: -1
    },
    // 选择结束位置
    selectionEnd: {
      type: Number,
      value: -1
    },
    // 键盘弹起时是否自动上推页面
    adjustPosition: {
      type: Boolean,
      value: true
    },
    // 是否保持键盘
    holdKeyboard: {
      type: Boolean,
      value: false
    },
    // 自定义样式
    customStyle: {
      type: String,
      value: ''
    }
  },

  data: {
    focused: false,
    showPassword: false,
    inputType: 'text',
    animationClass: ''
  },

  lifetimes: {
    attached() {
      this.updateInputType();
    }
  },

  observers: {
    'type': function(newType) {
      this.updateInputType();
    }
  },

  methods: {
    // 更新输入框类型
    updateInputType() {
      const { type } = this.data;
      let inputType = 'text';
      
      if (type === 'password') {
        inputType = this.data.showPassword ? 'text' : 'password';
      } else if (type === 'search') {
        inputType = 'text';
      } else {
        inputType = type;
      }
      
      this.setData({ inputType });
    },

    // 输入事件
    onInput(e) {
      const value = e.detail.value;
      this.triggerEvent('input', {
        value,
        cursor: e.detail.cursor
      });
    },

    // 聚焦事件
    onFocus(e) {
      this.setData({ 
        focused: true,
        animationClass: 'focused'
      });
      
      this.triggerEvent('focus', {
        value: e.detail.value,
        height: e.detail.height
      });
    },

    // 失焦事件
    onBlur(e) {
      this.setData({ 
        focused: false,
        animationClass: ''
      });
      
      this.triggerEvent('blur', {
        value: e.detail.value,
        cursor: e.detail.cursor
      });
    },

    // 确认事件
    onConfirm(e) {
      this.triggerEvent('confirm', {
        value: e.detail.value
      });
    },

    // 键盘高度变化
    onKeyboardHeightChange(e) {
      this.triggerEvent('keyboardheightchange', {
        height: e.detail.height,
        duration: e.detail.duration
      });
    },

    // 清除输入
    onClear() {
      this.triggerEvent('input', {
        value: '',
        cursor: 0
      });
      
      this.triggerEvent('clear');
      
      // 触觉反馈
      wx.vibrateShort({
        type: 'light'
      });
    },

    // 切换密码显示
    onTogglePassword() {
      const showPassword = !this.data.showPassword;
      this.setData({ showPassword });
      this.updateInputType();
      
      // 触觉反馈
      wx.vibrateShort({
        type: 'light'
      });
    },

    // 设置值
    setValue(value) {
      this.triggerEvent('input', {
        value,
        cursor: value.length
      });
    },

    // 设置聚焦
    setFocus(focus = true) {
      this.setData({ focus });
    },

    // 设置状态
    setStatus(status, errorText = '', helpText = '') {
      this.setData({ 
        status,
        errorText,
        helpText
      });
      
      // 添加动画效果
      if (status === 'error') {
        this.showErrorAnimation();
      } else if (status === 'success') {
        this.showSuccessAnimation();
      }
    },

    // 显示错误动画
    showErrorAnimation() {
      this.setData({ animationClass: 'error-shake' });
      setTimeout(() => {
        this.setData({ animationClass: '' });
      }, 500);
    },

    // 显示成功动画
    showSuccessAnimation() {
      this.setData({ animationClass: 'success-pulse' });
      setTimeout(() => {
        this.setData({ animationClass: '' });
      }, 600);
    },

    // 验证输入
    validate(rules = {}) {
      const value = this.properties.value;
      
      // 必填验证
      if (this.properties.required && !value) {
        this.setStatus('error', '此字段为必填项');
        return false;
      }
      
      // 最小长度验证
      if (rules.minLength && value.length < rules.minLength) {
        this.setStatus('error', `最少需要${rules.minLength}个字符`);
        return false;
      }
      
      // 最大长度验证
      if (rules.maxLength && value.length > rules.maxLength) {
        this.setStatus('error', `最多允许${rules.maxLength}个字符`);
        return false;
      }
      
      // 正则验证
      if (rules.pattern && !rules.pattern.test(value)) {
        this.setStatus('error', rules.message || '格式不正确');
        return false;
      }
      
      // 自定义验证
      if (rules.validator && typeof rules.validator === 'function') {
        const result = rules.validator(value);
        if (result !== true) {
          this.setStatus('error', result || '验证失败');
          return false;
        }
      }
      
      this.setStatus('success');
      return true;
    },

    // 重置状态
    reset() {
      this.setData({
        status: 'default',
        errorText: '',
        helpText: '',
        focused: false,
        showPassword: false,
        animationClass: ''
      });
      this.updateInputType();
    }
  }
}); 